package com.mason.forum.service;

import com.mason.forum.model.User;
import org.apache.ibatis.annotations.Param;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 马拉圈
 * Date: 2023-10-05
 * Time: 11:32
 */

public interface IUserService {
//IUserService不加注解，因为它自己不能实例化，应该注入其实现类，也就是说其实现类要加注解
// 并且要避免冲突，这样框架就会注入唯一的那个实现这个接口的bean给这个IUserService对象

    /**
     * 创建普通用户
     * @param user 用户信息
     */
    void createNormalUser(User user);

    /**
     * 通过用户名查找用户信息
     * @param username 用户名
     * @return 用户信息
     */
    User selectByUsername(String username);

    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    User login (String username, String password);

    /**
     *  根据Id查询用户信息
     * @param id 用户Id
     * @return 用户信息
     */
    User selectById(Long id);


    /**
     * 通过id修改帖子数+1
     * @param id 用户id
     */
    void incrementArticleCountById(@Param("id") Long id);

    /**
     * 通过id修改帖子数-1
     * @param id 用户id
     */
    void decrementArticleCountById(@Param("id") Long id);



    /**
     * 根据传过来的携带更新信息的用户对象的已有信息，更新用户信息
     * （通过接口的实现，只）
     * @param user 携带更新信息的用户对象
     */
    void updateUserInfo(User user);


    /**
     * 验证老密码后，修改用户的密码
     * @param id 用户id
     * @param password 新密码
     * @param oldPassword 老密码
     */
    void modifyUserPassword(Long id, String password, String oldPassword);

}
